#include <iostream>
#include <signal.h>
#include <unistd.h>

//系统函数signal(signo, sigFunc)表示捕捉信号，参数1为传入的信号量，参数2是处理函数
//信号量signo大概30个，列举一些常用的：
//SIGUSR1 留给用户使用，应用级，也可以用linux命令 kill -USR1 PID
//SIGUSR2 同上
//SIGTERM 等同于linux命令kill PID或者c函数kill(getpid(), signo)
//SIGINT 键盘ctrl+c
//SIGCHLD 子进程退出后会发送给父进程的信号量
static void sig_usr(int);

int main(){
    if(signal(SIGUSR1, sig_usr) == SIG_ERR){
        printf("catch sigusr1 error\n");
    }

    if(signal(SIGUSR2, sig_usr) == SIG_ERR){
        printf("catch sigusr2 error\n");
    }

    if(signal(SIGINT, sig_usr) == SIG_ERR){
        printf("catch SIGINT error\n");
    }

    if(signal(SIGCHLD, sig_usr) == SIG_ERR){
        printf("catch SIGCHLD error\n");
    }

    for(;;){
        pause();
    }

    return 0;
}

static void sig_usr(int signo){
    if(signo == SIGUSR1){
        printf("received SIGUSR1 : %d\n", signo);
    }else if(signo == SIGUSR2){
        printf("received SIGUSR2 : %d\n", signo);
    }else if(signo == SIGINT){
        printf("received SIGINT : %d\n", signo);
    }else if(signo == SIGCHLD){
        printf("received SIGCHLD : %d\n", signo);
    }else{
        printf("received signal error %d\n", signo);
    }
}